//
//  main.cpp
//  面向函数传递对象
//
//  Created by mac on 16/3/10.
//  Copyright © 2016年 mac. All rights reserved.
//

#include <iostream>
using namespace std;

/*类声明与定义*/
class Value{
    
private:
    int x;
public:
    int get_x(){return x;}
    void set_x(int i){x=i;}
    Value(int a){x=a;}
    
};


/* 使用对象作为函数参数*/
/*****************************************************************/

void Pow(Value v){
    v.set_x(v.get_x()*v.get_x());
    cout<<"在函数Pow内，型参对象v的数据成员x的值为："<<v.get_x()<<endl;
}
/*****************************************************************/



/* 使用对象指针作为函数参数*/
/*****************************************************************/
void Pow_Pontargu(Value *v){
    v->set_x(v->get_x()*v->get_x());
    cout<<"在函数Pow内，型参对象v的数据成员x的值为："<<v->get_x()<<endl;
}
/*****************************************************************/
/* 使用对象指针作为函数参数*/
/*****************************************************************/
void Pow_quote(Value &v){
    v.set_x(v.get_x()*v.get_x());
    cout<<"在函数Pow内，型参对象v的数据成员x的值为："<<v.get_x()<<endl;
}
/*****************************************************************/



int main(int argc, const char * argv[]) {
    std::cout << "Hello, World!\n";
    
    /*****************************************************************/
    Value w(4);
    cout<<"在调用函数Pow之前，对象w的数据成员x的值为："<<w.get_x()<<endl;
    Pow(w);
    cout<<"在调用函数Pow之后，对象w的数据成员x的值为："<<w.get_x()<<endl;
    /*****************************************************************/
    
    /*****************************************************************/
    Value t(3);
    cout<<"在调用函数Pow_Pontargu之前，对象t的数据成员x的值为："<<t.get_x()<<endl;
    Pow_Pontargu(&t);
    cout<<"在调用函数Pow_Pontargu之后，对象t的数据成员x的值为："<<t.get_x()<<endl;
    /*****************************************************************/
    
    /*****************************************************************/
    Value v(8);
    cout<<"在调用函数Pow_quote之前，对象v的数据成员x的值为："<<t.get_x()<<endl;
    Pow_quote(v);
    cout<<"在调用函数Pow_quote之后，对象v的数据成员x的值为："<<t.get_x()<<endl;
    /*****************************************************************/
    

    
    return 0;
}
